package org.imaginedays.java.design.patter.decorator;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Component component = new ConcreteComponent();
		
		//这是一个新的装饰着，为需要装饰的组件提供更多的方法。
		//方法一  继承和组合了component。
		Decorator decorator = new ConcreteDecorator(component);
		decorator.operation();
		
		
		//方法二 是组合了component 调用了 component里面的方法，之后调用decorator中新增加的方法
		//这个方法有一个问题 ，就是 不能使用concreteDecorator b 装饰 a  所以如果要实现 b 装饰  a 的话 就需要 使用方法1了。
//		DecoratorNew decoratorNew = new ConcreteDecoratorNew(component);
//		decoratorNew.operation();
		
		/**
		 * 装饰模式分为三步。
		 * 如果component and decorator 
		 * 当组件想被不同的装饰者装饰的话 他只需要选择不同的装饰者就可以了。
		 * 但是 每个装饰者在装饰完组件之后，必须调用组件的操作方法。所以决定了，decorator的
		 * 两个类的关系是组合
		 * decorator 为整体，与component 是部分。 当decorator创建时，component必须创建。
		 */

	}

}
